package com.ic.util;

import java.util.UUID;

/**
 * Description: 本类提供基于uuid的键值生成方法
 * <p>
 * Author: zen_hu
 * Date  : 2017/1/10
 * Time  : 13:12
 */
public class KeyGenerateUtil {
	private static KeyGenerateUtil pkg = null;
	// 存放主键数组的大小
	private static final int SIZE = 20;
	private String[] keyBuffer = new String[SIZE];
	// 数组游标
	private int index = 0;


	private KeyGenerateUtil() {
		keyGenerate();
	}


	/**
	 * 利用单例模式，获取本类的实例
	 *
	 * @return 返回本类的唯一实例
	 */
	synchronized public static KeyGenerateUtil getInstance() {
		if (pkg == null)
			return new KeyGenerateUtil();
		return pkg;
	}

	/**
	 * 获取键值
	 *
	 * @return 返回键值
	 */
	synchronized public String getKey() {
		String key = keyBuffer[index];
		index++;
		if (index == SIZE)
			keyGenerate();
		return key;
	}

	/**
	 * 填充存储键值的数组
	 */
	private void keyGenerate() {
		index = 0;
		for (int i = 0; i < SIZE; i++) {
			keyBuffer[i] = uuidKey();
		}
	}

	/**
	 * 利用UUID.randomUUID()方法实现键值生成
	 *
	 * @return 返回键值
	 */
	private String uuidKey() {
		return UUID.randomUUID().toString().replaceAll("-", "");
	}
}
